
#ifndef CONFIGVALIDATOR_HPP_
#define CONFIGVALIDATOR_HPP_

#include <string>
#include "../logger/logger.hpp"
#include "../config/config.hpp"
#include "BaseValidator.hpp"
#include "controlConfigItem.hpp"

class ConfigValidator : public BaseValidator{
private:
	Logger				*logger;
	Config				*config;
	int					numberOfFieldsExpected;
	ControlConfigItem	configItem;

public:

	/**
	 * Constructor por defecto de la clase ConfigValidator.
	 */
	ConfigValidator(){}

	/**
	 * Constructor parametrizado de la clase ConfigValidator.
	 */
	ConfigValidator(std::string &fileToParse, Logger *log, Config *c);

	/**
	 * Destructor de la clase ConfigValidator.
	 */
	virtual ~ConfigValidator();

	/**
	 * Generador del contenido de la clase ConfigValidator.
	 */
	void create(std::string &fileToParse, Logger *log, Config *c);

	/**
	 * Metodo que valida la cantidad de campos del item de configuracion
	 * ingresante.
	 * @param lineCount de tipo int.
	 * @param fieldAmount de tipo int.
	 */
	void validateNumberOfFields(int lineCount, int fieldAmount);

	/**
	 * Metodo que valida el tipo del campo del item de configuracion
	 * ingresante.
	 * @param lineCount de tipo int.
	 * @param fieldNumber de tipo int.
	 * @param field de clase std::string.
	 */
	void validateField(int lineCount, int fieldNumber, std::string field);

	/**
	 * Metodo que valida la insercion del item de configuracion en la
	 * instancia de Config.
	 * @param lineCount de tipo int.
	 */
	void validateElementAdding(int lineCount);
};


#endif /* CONFIGVALIDATOR_HPP_ */
